<?php
/***************************************************************************
 *   Copyright (C) 2007 by Andrea Blankenstijn, David Dieulivol            *
 *   darkan9el@gmail.com, daviddieulivol5@hotmail.com                      *
 *                                                                         *
 *   All rights reserved.                                                  *
 *   This work is released under the terms of the New BSD License.         *
 *   See LICENSE.BSD file for licensing details                            *
 ***************************************************************************/
/* * *
 * $Id: author.class.php 53 2007-10-18 19:17:41Z DarkAn9el $
 * * */

/**
 * \class Author
 * \version $Revision: 53 $
 * \date $Date: 2007-10-18 19:17:41 +0000 (Thu, 18 Oct 2007) $
 * \author Andrea Blankenstijn
 * \brief Classe représentant les auteurs des photos
 */

class Author
{
	private $firstname;   ///< prénom de l'auteur
	private $id;          ///< identifiant de l'auteur
	private $lastname;    ///< nom de l'auteur
	private $pdoProxy;    ///< instance de PdoProxy
	private $tAuthors;    ///< nom de la table avec préfixe

	/**
	 * \brief Retourne un tableau de touts les auteurs.
	 *
	 * Retourne un tableau contenant toutes les informations des auteurs.
	 * Remarque: aucun champ n'est traité avec stripslashes
	 * \param[in] $dbh instance PdoProxy
	 * \param[in] $mustHavePhoto retourner uniquement les auteurs ayant des images (bool)
	 * \param[in] $sortCol champs utilisé pour ordrer le jeu de résultats (int)
	 *   - 0 → par ID
	 *   - 1 → par nom
	 *   - 2 → par prénom
	 * \param[in] $limit limiter le nombre de résultats retournés (SQL: LIMIT) (int)
	 * \param[in] $offset ignorer les X premiers résultats (SQL: OFFSET) (int)
	 * \return tableau associatif des auteurs sélectionnés
	 * \return FALSE si la requête n'a retourné aucun résultat
	 */
	public static function listAuthors(PdoProxy $dbh, $mustHavePhoto = FALSE, $sortCol = 0, $limit = null, $offset = null)
	{
		$tAuthors = $dbh->getPrefix() .'authors';

		$limit    = NULL;
		$order    = NULL;
		$where    = NULL;

		// Close WHERE
		if($mustHavePhoto)
			$where = 'WHERE `idAuthors` IN (SELECT DISTINCT `idAuthors` FROM `'.$dbh->getPrefix().'photos`);';

		// Close ORDER BY
		if(is_int($sortCol))
		{
			$columns = array('`idAuthors`', '`lastname`', '`firstname`');
			$order   = 'ORDER BY '. $columns[$sortCol];
		}

		// Close LIMIT/OFFSET
		if(is_int($limit))
		{
			$limit = 'LIMIT '. $limit;
			if(is_int($offset))
				$limit .= ' OFFSET '. $offset;
		}

		if($query = $dbh->query('SELECT * FROM `'.$tAuthors.'` '.$where.' '.$order.' '.$limit.';'))
			return $query->fetchAll(PDO::FETCH_ASSOC);
		else
			return FALSE;
	}

	/**
	 * \brief Constructeur de la classe. Charge les données d'un
	 * auteur si l'on passe son identifiant comme second argument.
	 * \param[in] $dbh instance PDO
	 * \param[in] $idAuthor identifiant de l'auteur à charger
	 * \see load
	 */
    public function __construct(PdoProxy $dbh, $idAuthor = NULL)
    {
    	$this->pdoProxy = $dbh;
    	$this->tAuthors = $dbh->getPrefix() .'authors';

		if(!empty($idAuthor))
			$this->load($idAuthor);
    }

	/**
	 * \brief Méthode d'accès à l'attribut firstname
	 * \return prénom de l'auteur
	 */
	public function getFirstname()
	{
		return $this->firstname;
	}

	/**
	 * \brief Méthode d'accès à l'attribut id
	 * \return identifiant de l'auteur
	 */
	public function getId()
	{
		return $this->id;
	}

	/**
	 * \brief Méthode d'accès à l'attribut lastname
	 * \return nom de l'auteur
	 */
	public function getLastname()
	{
		return $this->lastname;
	}

	/**
	 * \brief Charge l'auteur ayant l'identifiant passé en argument.
	 * \param[in] $id identifiant de l'auteur
	 * \exception Exception la requête n'a renvoyé aucun résultat
	 */
	public function load($id)
	{
		$request = $pdoProxy->prepare('SELECT `lastname`,`firstname` FROM `'. $this->tAuthors .'` WHERE `idAuthors` = :id;');
		$request->bindValue(':id', $id, PDO::PARAM_INT);
		$request->execute();

		if($row = $request->fetch())
		{
			$this->id        = $id;
			$this->lastname  = stripslashes($row['lastname']);
			$this->firstname = stripslashes($row['firstname']);
		}
		else
			throw new Exception('L\'auteur '. $id .' n\'a pas pu être chargé');
	}
}
?>
